package com.atguigu.gulimall.order;

import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.session.config.annotation.web.http.EnableSpringHttpSession;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 *  事务时效问题
 *      同一个对象内互调默认失效，绕过了代理对象，事务要使用代理对象来控制
 *  解决：使用代理对象来调用事务方法
 *      1）、引入代理aop-starter:spring-boot-starter-aop 引入aspectj
 *      2)、@EnableAspectJAutoProxy开启引入aspectj动态代理，以后所有的动态代理都是aspect创建（即使没有接口）
 *
 *  使用rabbitmq
 *      1、引入amqp场景：RabbitAutoConfiguration会自动生效
 *      2、给容器自动配置 rabbitTemplate、amqpAdmin、CachingConnectionFactory、rabbitMessagingTemplate
 *      3、启动 @EnableRabbitmq
 *    配置文件
 *    @ConfigurationProperties(prefix = "spring.rabbitmq")
 *      4、监听消息：RabbitListener 必须先开启@EnableRabbitmq
 *          @RabbitListener 可用在类+方法上
 *
 */

@EnableRabbit
@EnableAspectJAutoProxy(exposeProxy = true)
@SpringBootApplication
@EnableFeignClients(basePackages = "com.atguigu.gulimall.order.feign") //spring扫描feign接口
@EnableDiscoveryClient
//开启session
@EnableRedisHttpSession
public class GuigumallOrderApplication {

    public static void main(String[] args) {

        SpringApplication.run(GuigumallOrderApplication.class, args);
    }

}
